package ar.com.android.alco.providers;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import ar.com.android.alco.dbHelpers.SQLALCOHelper;
import ar.com.android.alco.entities.Alimentos;

public class AlimentosProvider {
	
	private static final String DB_COLUMN_0_NAME = "idAlimento";
	private static final String DB_COLUMN_1_NAME = "idCategoriaAlimento";
	private static final String DB_COLUMN_2_NAME = "descripcion";
	private static final String DB_COLUMN_3_NAME = "calorias";
	private static final String DB_COLUMN_4_NAME = "equivalencia";
	private static final String DB_COLUMN_5_NAME = "creditos";

	private SQLiteDatabase database;
	private SQLALCOHelper dbHelper;
	private String[] allColumns = {DB_COLUMN_0_NAME, DB_COLUMN_1_NAME, DB_COLUMN_2_NAME, DB_COLUMN_3_NAME, DB_COLUMN_4_NAME, DB_COLUMN_5_NAME};
	
	public AlimentosProvider(Context context) {
		dbHelper = SQLALCOHelper.getHelper(context);
		database = dbHelper.getWritableDatabase();
	}
		
	public long insertAlimento(Alimentos alimento)
	{
		ContentValues contentValues = new ContentValues();
		contentValues.put(DB_COLUMN_0_NAME, alimento.getIdAlimento());
		contentValues.put(DB_COLUMN_1_NAME, alimento.getIdCategoriaAlimento());
		contentValues.put(DB_COLUMN_2_NAME, alimento.getDescripcion());
		contentValues.put(DB_COLUMN_3_NAME, alimento.getCalorias());
		contentValues.put(DB_COLUMN_4_NAME, alimento.getEquivalencia());
		contentValues.put(DB_COLUMN_5_NAME, alimento.getCreditos());
		
		long insertId = database.insert(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, null, contentValues);
		return insertId;
	}
	
	public boolean removeAlimentos(Integer idAlimento)
	{
		int result = database.delete(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, DB_COLUMN_0_NAME + " = " + idAlimento, null);
				
		if(result > 0)            
			return true;        
		else            
			return false;
	}
	
	public boolean removeAlimentos()
	{
		int result = database.delete(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, null, null);
				
		if(result > 0)            
			return true;        
		else            
			return false;
	}
		
	public long updateAlimento(Alimentos alimento)
	{
		ContentValues contentValues = new ContentValues();
		contentValues.put(DB_COLUMN_1_NAME, alimento.getIdCategoriaAlimento());
		contentValues.put(DB_COLUMN_2_NAME, alimento.getDescripcion());
		contentValues.put(DB_COLUMN_3_NAME, alimento.getCalorias());
		contentValues.put(DB_COLUMN_4_NAME, alimento.getEquivalencia());
		contentValues.put(DB_COLUMN_5_NAME, alimento.getCreditos());
		
		return database.update(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, contentValues, DB_COLUMN_0_NAME + " = " + alimento.getIdAlimento(), null);
	}
	
	public Alimentos getAlimento(Integer idAlimento)
	{
		try
		{
			Cursor cursor = database.query(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, allColumns, DB_COLUMN_0_NAME + " = " + idAlimento, null, null, null, null);
			cursor.moveToFirst();
			
			Alimentos alimento = new Alimentos();
			alimento.setIdAlimento(cursor.getInt(0));
			alimento.setIdCategoriaAlimento(cursor.getInt(1));
			alimento.setDescripcion(cursor.getString(2));
			alimento.setCalorias(cursor.getDouble(3));
			alimento.setEquivalencia(cursor.getString(4));
			alimento.setCreditos(cursor.getDouble(5));
			alimento.setSelected(false);

			cursor.close();
			return alimento;
	
		}
		catch (Exception e) {
			return null;
		}		
	}
	
	public List<Alimentos> getAlimentos() {
		List<Alimentos> lstAlimentos = new ArrayList<Alimentos>();
		
		Cursor cursor = database.query(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, allColumns, null, null, null, null, null);
		cursor.moveToFirst();
		
		while (!cursor.isAfterLast()) {
			Alimentos alimento = new Alimentos();
			alimento.setIdAlimento(cursor.getInt(0));
			alimento.setIdCategoriaAlimento(cursor.getInt(1));
			alimento.setDescripcion(cursor.getString(2));
			alimento.setCalorias(cursor.getDouble(3));
			alimento.setEquivalencia(cursor.getString(4));
			alimento.setCreditos(cursor.getDouble(5));
			alimento.setSelected(false);
			
			lstAlimentos.add(alimento);
			cursor.moveToNext();
		}
		cursor.close();
		return lstAlimentos;
	}
	
	public List<Alimentos> getAlimentos(Integer idCategoria) {
		List<Alimentos> lstAlimentos = new ArrayList<Alimentos>();
		
		Cursor cursor = database.query(SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME, allColumns, DB_COLUMN_1_NAME + " = " + idCategoria, null, null, null, null);
		cursor.moveToFirst();
		
		while (!cursor.isAfterLast()) {
			Alimentos alimento = new Alimentos();
			alimento.setIdAlimento(cursor.getInt(0));
			alimento.setIdCategoriaAlimento(cursor.getInt(1));
			alimento.setDescripcion(cursor.getString(2));
			alimento.setCalorias(cursor.getDouble(3));
			alimento.setEquivalencia(cursor.getString(4));
			alimento.setCreditos(cursor.getDouble(5));
			alimento.setSelected(false);
			
			lstAlimentos.add(alimento);
			cursor.moveToNext();
		}
		cursor.close();
		return lstAlimentos;
	}
	
	public List<Alimentos> getAlimentos(String strLikeAlimento) {
		List<Alimentos> lstAlimentos = new ArrayList<Alimentos>();
				
		String strSQL = "SELECT *  FROM " + SQLALCOHelper.DB_ALIMENTOS_TABLE_NAME;
			   strSQL += " WHERE ";
			   strSQL += DB_COLUMN_2_NAME + " LIKE '%" + strLikeAlimento + "%'";
		
		Cursor cursor = database.rawQuery(strSQL, null);
		cursor.moveToFirst();
		
		while (!cursor.isAfterLast()) {
			Alimentos alimento = new Alimentos();
			alimento.setIdAlimento(cursor.getInt(0));
			alimento.setIdCategoriaAlimento(cursor.getInt(1));
			alimento.setDescripcion(cursor.getString(2));
			alimento.setCalorias(cursor.getDouble(3));
			alimento.setEquivalencia(cursor.getString(4));
			alimento.setCreditos(cursor.getDouble(5));
			alimento.setSelected(false);
			
			lstAlimentos.add(alimento);
			cursor.moveToNext();
		}
		cursor.close();
		return lstAlimentos;
	}
}
